﻿#pragma once
/**
@author 何炜
@date 2011/4/28
@brief .
@details
*/

#include "GLLSystem.h"
#include "GLLSingleton.h"

namespace GLL
{
	class OSApp;

	enum VKCODE
	{
		VK_0 = 0x30,
		VK_1,
		VK_2,
		VK_3,
		VK_4,
		VK_5,
		VK_6,
		VK_7,
		VK_8,
		VK_9,
		VK_A = 0x41,
		VK_B,
		VK_C,
		VK_D,
		VK_E,
		VK_F,
		VK_G,
		VK_H,
		VK_I,
		VK_J,
		VK_K,
		VK_L,
		VK_M,
		VK_N,
		VK_O,
		VK_P,
		VK_Q,
		VK_R,
		VK_S,
		VK_T,
		VK_U,
		VK_V,
		VK_W,
		VK_X,
		VK_Y,
		VK_Z,
	};

	/**输入系统.	
	输入系统有很多，如硬盘，网络等。
	这个只是人机输入，如键盘鼠标等。
	*/
	class Input : public System, public Singleton<Input>
	{
		int _wheel;
		Size2Di _size;
	public:
		/**创建输入系统.*/
		void Create(OSApp*);

		///销毁
		virtual void Destroy(){}

		/**某个键是否按下.*/
		bool IsKeyDown(int vk_code);
		bool IsKeyDown(VKCODE vk_code){return IsKeyDown(int(vk_code));}

		/**得到两次调用之间鼠标滚轮的数值.*/
		int GetMouseWheelDelta();
		const Size2Di& GetMousePosition(){return _size;}
		Input();
		~Input(){	Destroy();}

#ifdef GLL_WIN
		LRESULT MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
#endif GLL_WIN
	};



};//GLL